/**
 * 
 */
package org.xiangxji.util.framework.framework;

import java.util.Collection;




/**
 * 管道管理接口
 * @author xiangxji
 *
 */
public interface IPipeManager <I extends IPipeInput,R extends IPipeResult,D extends IPipeData<I,R>>
{
	/**
	 * 初始化资源
	 */
	public void init();
	
	/**
	 * 释放资源
	 */
	public void destory();
	
	/**
	 * 执行管道链，建立管道上下文，执行管道链调用，返回管道执行结果
	 * 执行顺序和注册的过程保持一致
	 * @param request
	 * @param response
	 * @return
	 */
	public R doPipes(I pipeInput);
	
	/**
	 * 获取注册管道
	 * @return
	 */
	public IPipe<? super I, ? super R>[] getPipes();
	
	/**
	 * 注册管道
	 * @param pipe
	 */
	public void register(IPipe<? super I, ? super R> pipe);
	
	/**
	 * 注销管道
	 * @param pipe
	 */
	public void unregister(IPipe<? super I, ? super R> pipe);
	
	/**
	 * 移除所有管道
	 */
	public void removeAll();
	
	/**
	 * 批量注册管道
	 * @param pipes
	 */
	public void addAll(Collection<IPipe<? super I, ? super R>> pipes);
	
	/**
	 * 批量替换
	 * @param pipes
	 */
	public void replaceAll(Collection<IPipe<? super I, ? super R>> pipes);
	
	
	public void addAsynPipeResult(D data);
	
	public void removeAsynPipeResult(D data);
	
	
}
